package List;

import java.util.Arrays;

//线性表
public class MyArrayList implements List1{
    private int[] array; //val（要实例化数组才能往里面存！！）
    private int usedSize;//个数
    public MyArrayList() {//默认构造方法(在这里面可以实例化数组)
        this.array=new int[10];
    }

    //添加的方法 为帮助实现重写方法
    //判满
    private boolean isFull(){
        //如果放入的元素个数等于线性表的长度，则满，需要扩容
        return this.usedSize== this.array.length;
    }

    //扩容：让表长等于原来的二倍
    private void grow(){
        //利用Array所提供的方法进行扩容操作
        this.array= Arrays.copyOf(this.array,
                    2*this.array.length);
    }
    //重写List1接口中的方法
    @Override
    public void add(int data) {
        //将数据默认添加为最后一个位置
        //添加前需要判满，若满则扩容，不满则添加
        if(isFull()){
            grow();
        }else {
            this.array[this.usedSize]=data;
            this.usedSize++;
        }
    }
    @Override
    public void add(int pos, int data) {
        //指定pos位置添加
        if(isFull()){
            grow();
        }else{
            for (int i = usedSize-1; i >=pos ; i--) {
                this.array[i+1]=this.array[i];
            }
            this.array[pos]=data;
            this.usedSize++;
        }
    }


    @Override
    public void remove(int toRemove) {
        int pos=index(toRemove);
        for (int i = pos; i < this.usedSize-1; i++) {
                array[i]=array[i+1];
        }
        this.usedSize--;
    }

    @Override
    public boolean contains(int toFind) {
        for (int i = 0; i < this.usedSize; i++) {
            if(array[i]==toFind){
                return true;
            }
        }
        return  false;
    }

    @Override
    public int index(int toFind) {
        //查找某个元素对应的位置
        //首先 所要找的值的下标得符合标准 不能是-1
        for (int i = 0; i < this.usedSize; i++) {
            if(array[i]==toFind){
                return i;
            }
        }
        return -1;
    }

    @Override
    public void get(int pos) {

        System.out.print(this.array[pos]);
        System.out.println();
    }

    @Override
    public int size() {
        return this.usedSize;
    }

    @Override
    public void clear() {
        this.usedSize=0;
    }

    @Override
    public void display() {
        for (int i = 0; i < this.usedSize; i++) {
            System.out.print(array[i]+" ");
        }
        System.out.println();
    }

}
